
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->

<head>


<meta charset="utf-8">
<meta http-equiv="cleartype" content="on">

<title>Operating Hbase Through Thrift With Nodejs - Sam小龙</title>
<meta name="author" content="xiaolong.yuanxl">




<meta name="description" content="利用thrift，nodejs操作hbase">

<meta name="keywords" content="thrift ">


<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- Twitter Cards -->


<!-- Open Graph -->
<meta property="og:local" content="en_US">
<meta property="og:type" content="article">
<meta property="og:url" content="http://yuanxiaolong.github.io/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs">
<meta property="og:title" content="operating hbase through thrift with nodejs">
<meta property="og:description" content="利用thrift，nodejs操作hbase">

  <meta property="og:image" content="">

<meta property="og:site_name" content="Sam小龙">

<link rel="canonical" href="http://yuanxiaolong.github.io/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<!-- <link href="//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet"> -->
<link href="/stylesheets/font-awesome.min.css" rel="stylesheet">
<link href="/atom.xml" rel="alternate" title="Sam小龙" type="application/atom+xml">

<!-- the flow button on left -->
<script src="/javascripts/vendor/modernizr-2.6.2.custom.min.js"></script>


  <style type="text/css">body {background-image:url(/images/bg.jpg);background-size:cover;}</style>

<!-- 
  

  
    
  

  <style type="text/css">body {background-image:url(
      /images/
    
      bg.jpg
    
  
    );}</style>
 -->

<!--Fonts from Google"s Web font directory at http://google.com/webfonts
<link href="//fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
-->


</head>

<body id="post" >

<!--[if lt IE 9]><div class="upgrade"><strong><a href="http://whatbrowser.org/">Your browser is quite old!</strong> Why not upgrade to a different browser to better enjoy this site?</a></div><![endif]-->
<nav id="dl-menu" class="dl-menuwrapper" role="navigation">
	<button class="dl-trigger">Open Menu</button>
	<ul class="dl-menu">
		<li><a href="/">主页</a></li>

		<li>
			<a href="#">内容</a>
			<ul class="dl-submenu">
				<li><a href="/posts/">文章列表</a></li>
				<li><a href="/categories/">分类列表</a></li>
			</ul>
		</li>

		<li>
			<a href="#">关于</a>
			<ul class="dl-submenu">
				<li>
					<img src="/images/avatar.png" alt="xiaolong.yuanxl photo" class="author-photo">
					<h4>xiaolong.yuanxl</h4>
					<p></p>
				</li>
				<li><a href="/about">关于我</a></li>
				<li>
					<a href="mailto:232351936@qq.com"><i class="fa fa-envelope"></i> Email</a>
				</li>
				
				
				<li>
					<a href="http://github.com/yuanxiaolong"><i class="fa fa-github"></i> GitHub</a>
				</li>
			</ul><!-- /.dl-submenu -->
		</li>

		
	</ul><!-- /.dl-menu -->
</nav><!-- /.dl-menuwrapper -->




<div id="main" role="main" >
  <article class="hentry">
    <header class="header-title">
      <div class="header-title-wrap">
        
          <h1 class="entry-title"><a href="/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/" rel="bookmark" title="operating hbase through thrift with nodejs">operating hbase through thrift with nodejs</a></h1>
        
        <h2>August 21, 2014</h2>
      </div><!-- /.header-title-wrap -->
    </header>
    <div class="entry-content">
      <p>用thrift做中间件，nodejs做客户端，操作hbase</p>

<!--more-->

<p>thrift是一种中间件，百度上有很多介绍，跟protobuf有些像。</p>

<p><img src="/images/thrift/20140821/nodehbase.png" alt="nodehbase" /></p>

<hr />

<h2 id="section">环境准备</h2>

<ul>
  <li>node安装配置 (百度搜索“nodejs linux 安装”)</li>
  <li>thrift安装  </li>
  <li>hadoop安装配置</li>
  <li>hbase安装配置</li>
</ul>

<p>注：hadoop和hbase的安装配置，我的blog里有介绍，感兴趣的同学可以翻阅一下。thrift安装就比较麻烦了，这里有个<a href="http://thrift.apache.org/docs/BuildingFromSource" target="_blank"><font color="#6868b4">官网连接</font></a>
还有不同操作系统安装之前的<a href="http://thrift.apache.org/docs/install/" target="_blank"><font color="#6868b4">依赖</font></a> 。</p>

<p>thrift安装好后，可以查看一下版本</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">xiaolongyuan@xiaolongdeMacBook-Air conf<span class="nv">$ </span>thrift -version
</span><span class="line">Thrift version 0.9.1
</span></code></pre></td></tr></table></div></figure></notextile></div>

<hr />

<h2 id="section-1">集成过程</h2>

<p>1.先对nodejs进行安装thrift的依赖包,设置<font color="green">NODE_PATH</font>。</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">xiaolongyuan@xiaolongdeMacBook-Air thrift_work<span class="nv">$ </span>npm install -g thrift
</span><span class="line">thrift@0.9.1 /usr/local/lib/node_modules/thrift
</span><span class="line">├── node-int64@0.3.1
</span><span class="line">└── nodeunit@0.8.8 <span class="o">(</span>tap@0.4.12<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="c">#node</span>
</span><span class="line"><span class="nb">export </span><span class="nv">NODE_PATH</span><span class="o">=</span>/usr/local/lib/node_modules/
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>2.启动hadoop，启动hbase及hbase thrift服务</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>hadoop/bin</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">sh ./start-all.sh
</span></code></pre></td></tr></table></div></figure></notextile></div>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>hbase/bin</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">sh ./start-hbase.sh
</span><span class="line">hbase-daemon.sh start thrift -f
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>通过jps可以查看到进程<font color="#7c837f">（我用的是hadoop hbase伪分布式）</font></p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">xiaolongyuan@xiaolongdeMacBook-Air bin<span class="nv">$ </span>jps
</span><span class="line">440 JobTracker
</span><span class="line">238 DataNode
</span><span class="line">974 ThriftServer
</span><span class="line">801 HMaster
</span><span class="line">754 HQuorumPeer
</span><span class="line">915 HRegionServer
</span><span class="line">361 SecondaryNameNode
</span><span class="line">538 TaskTracker
</span><span class="line">120 NameNode
</span><span class="line">1031 Jps
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>3.下载hbase源码，当前版本 <a href="http://mirror.bit.edu.cn/apache/hbase/stable/" target="_blank"><font color="#6868b4">hbase-0.98.5-src.tar.gz</font></a> ，在路径</p>

<font color="#942476"> hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift </font>
<p>下有个 <font color="#ae8647">Hbase.thrift </font>的文件</p>

<p>建议先新建一个文件夹，以便存放生成的内容，进入文件夹，执行命令</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">thrift -r --gen js:node /Users/xiaolongyuan/Documents/src-code/src-hbase-0.98.5/hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift/Hbase.thrift
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>可以看到在此路径下有文件生成，提供给客户端语言使用的API接口。
<img src="/images/thrift/20140821/thrift-node.png" alt="node" /></p>

<p>4.在gen-nodejs同级目录下，新建客户端js文件<font color="#7c837f">（如果不想在同级目录，需要修改js里的require路径)</font></p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>node4hbase.js</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
</pre></td><td class="code"><pre><code class="js"><span class="line"><span class="kd">var</span> <span class="nx">thrift</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;thrift&#39;</span><span class="p">),</span>
</span><span class="line">  <span class="nx">HBase</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./gen-nodejs/HBase.js&#39;</span><span class="p">),</span>
</span><span class="line">  <span class="nx">HBaseTypes</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">&#39;./gen-nodejs/HBase_types.js&#39;</span><span class="p">),</span>
</span><span class="line">  <span class="nx">connection</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createConnection</span><span class="p">(</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="mi">9090</span><span class="p">,</span> <span class="p">{</span>
</span><span class="line">    <span class="nx">transport</span><span class="o">:</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">TFramedTransport</span><span class="p">,</span>
</span><span class="line">    <span class="nx">protocol</span><span class="o">:</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">TBinaryProtocol</span>
</span><span class="line">  <span class="p">});</span>
</span><span class="line">
</span><span class="line"><span class="nx">connection</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;connect&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class="line">  <span class="kd">var</span> <span class="nx">client</span> <span class="o">=</span> <span class="nx">thrift</span><span class="p">.</span><span class="nx">createClient</span><span class="p">(</span><span class="nx">HBase</span><span class="p">,</span><span class="nx">connection</span><span class="p">);</span>
</span><span class="line">  <span class="nx">client</span><span class="p">.</span><span class="nx">getTableNames</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">,</span><span class="nx">data</span><span class="p">)</span> <span class="p">{</span>
</span><span class="line">    <span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
</span><span class="line">      <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;gettablenames error:&#39;</span><span class="p">,</span> <span class="nx">err</span><span class="p">);</span>
</span><span class="line">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class="line">      <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;hbase tables:&#39;</span><span class="p">,</span> <span class="nx">data</span><span class="p">);</span>
</span><span class="line">    <span class="p">}</span>
</span><span class="line">    <span class="nx">connection</span><span class="p">.</span><span class="nx">end</span><span class="p">();</span>
</span><span class="line">  <span class="p">});</span>
</span><span class="line"><span class="p">});</span>
</span><span class="line">
</span><span class="line"><span class="nx">connection</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">err</span><span class="p">){</span>
</span><span class="line">  <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;error&#39;</span><span class="p">,</span> <span class="nx">err</span><span class="p">);</span>
</span><span class="line"><span class="p">});</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>5.node执行js文件，验证。</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">xiaolongyuan@xiaolongdeMacBook-Air thrift_work<span class="nv">$ </span>node node4hbase.js
</span><span class="line">hbase tables: <span class="o">[</span> <span class="s1">&#39;student&#39;</span> <span class="o">]</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>查看hbase里的表</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">xiaolongyuan@xiaolongdeMacBook-Air bin<span class="nv">$ </span>hbase shell
</span><span class="line">
</span><span class="line">HBase Shell<span class="p">;</span> enter <span class="s1">&#39;help&lt;RETURN&gt;&#39;</span> <span class="k">for </span>list of supported commands.
</span><span class="line">Type <span class="s2">&quot;exit&lt;RETURN&gt;&quot;</span> to leave the HBase Shell
</span><span class="line">Version 0.98.4-hadoop1, r890e852ce1c51b71ad180f626b71a2a1009246da, Mon Jul 14 18:54:31 PDT 2014
</span><span class="line">
</span><span class="line">hbase<span class="o">(</span>main<span class="o">)</span>:001:0&gt; list
</span><span class="line">TABLE
</span><span class="line">2014-08-21 23:01:08.459 java<span class="o">[</span>1038:1903<span class="o">]</span> Unable to load realm info from SCDynamicStore
</span><span class="line">SLF4J: Class path contains multiple SLF4J bindings.
</span><span class="line">SLF4J: Found binding in <span class="o">[</span>jar:file:/Users/xiaolongyuan/Documents/hbase-0.98.4-hadoop1/lib/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class<span class="o">]</span>
</span><span class="line">SLF4J: Found binding in <span class="o">[</span>jar:file:/Users/xiaolongyuan/Documents/hadoop-1.2.1/lib/slf4j-log4j12-1.4.3.jar!/org/slf4j/impl/StaticLoggerBinder.class<span class="o">]</span>
</span><span class="line">SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings <span class="k">for </span>an explanation.
</span><span class="line">student
</span><span class="line">1 row<span class="o">(</span>s<span class="o">)</span> in 1.9050 <span class="nv">seconds</span>
</span><span class="line">
</span><span class="line"><span class="o">=</span>&gt; <span class="o">[</span><span class="s2">&quot;student&quot;</span><span class="o">]</span>
</span><span class="line">hbase<span class="o">(</span>main<span class="o">)</span>:002:0&gt; <span class="nb">exit</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<hr />

<h2 id="section-2">参考资料</h2>

<ol>
  <li>thrift官方教程 <a href="http://thrift.apache.org/tutorial/" target="_blank"><font color="#6868b4">地址</font></a></li>
  <li>nodejs操作hbase <a href="http://dailyjs.com/2013/07/04/hbase/" target="_blank"><font color="#6868b4">地址</font></a></li>
</ol>


      <!-- add copyright for each post -->
      <div style="margin-top:20px;">
        <font color="gray" size="3">
          原文地址，转载请注明出处:<br/>
          <a href="http://blog.yuanxiaolong.cn/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/">http://blog.yuanxiaolong.cn/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/</a>
        </font>
      </div>
      <footer class="entry-meta">
        <span class="entry-tags"><a href="/categories/#thrift" title="Pages tagged thrift" class="tag">thrift</a></span>
        <span><a href="/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/" rel="bookmark" title="operating hbase through thrift with nodejs">operating hbase through thrift with nodejs</a> was published on <span class="entry-date date published updated"><time datetime="2014-08-21T23:32:05+08:00">August 21, 2014</time></span></span>
        
        <span class="author vcard"><span class="fn"><a href="" title="About xiaolong.yuanxl">xiaolong.yuanxl</a></span></span>
        <div class="social-share">
          <div class="socialcount socialcount-small inline-list">
            <!-- <li class="facebook"><a href="https://www.facebook.com/sharer/sharer.php?u=/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/" title="Share on Facebook"><span class="count"><i class="fa fa-facebook-square"></i> Like</span></a></li>
            <li class="twitter"><a href="https://twitter.com/intent/tweet?text=/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/" title="Share on Twitter"><span class="count"><i class="fa fa-twitter-square"></i> Tweet</span></a></li>
            <li class="googleplus"><a href="https://plus.google.com/share?url=/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/" title="Share on Google Plus"><span class="count"><i class="fa fa-google-plus-square"></i> +1</span></a></li> -->
            <!-- 多说评论框 start -->
          	<div class="ds-thread" data-thread-key="/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/" data-title="operating hbase through thrift with nodejs" data-url="http://blog.yuanxiaolong.cn/blog/2014/08/21/operating-hbase-through-thrift-with-nodejs/"></div>
            <!-- 多说评论框 end -->
            <!-- 多说公共JS代码 start (一个网页只需插入一次) -->
            <script type="text/javascript">
            var duoshuoQuery = {short_name:"yuanxiaolong"};
            	(function() {
            		var ds = document.createElement('script');
            		ds.type = 'text/javascript';ds.async = true;
            		ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + '//static.duoshuo.com/embed.js';
            		ds.charset = 'UTF-8';
            		(document.getElementsByTagName('head')[0]
            		 || document.getElementsByTagName('body')[0]).appendChild(ds);
            	})();
            	</script>
            <!-- 多说公共JS代码 end -->
        </div>
        </div><!-- /.social-share -->
      </footer>

    </div><!-- /.entry-content -->
    
      <div class="read-more">
        
          <div class="read-more-header">
            <a href="/blog/2014/09/07/install-nfs-and-share-file/" class="btn">Read More</a>
          </div><!-- /.read-more-header -->
          <div class="read-more-content">
            <h3><a href="/blog/2014/09/07/install-nfs-and-share-file/" title="install nfs and shshare file">install nfs and shshare file</a></h3>
            <p>安装nfs服务器，用于共享配置 <a href="/blog/2014/09/07/install-nfs-and-share-file/"> Continue reading</a></p>
          </div><!-- /.read-more-content -->
        
        <div class="read-more-list">
          
            <div class="list-item">
              <h4><a href="/blog/2014/09/07/install-dns-server-bind/" title="install dns server bind">install dns server bind</a></h4>
              <span>Published on September 07, 2014</span>
            </div><!-- /.list-item -->
          
            <div class="list-item">
              <h4><a href="/blog/2014/08/31/analysis-hadoop-load-configuration/" title="analysis hadoop load configuration">analysis hadoop load configuration</a></h4>
              <span>Published on August 31, 2014</span>
            </div><!-- /.list-item -->
          
        </div><!-- /.read-more-list -->
      </div><!-- /.read-more -->
    
    
  </article>
</div><!-- /#main -->

<div class="footer-wrapper">
  <footer role="contentinfo">
    <span>&copy; 2014 xiaolong.yuanxl. Powered by <a href="http://octopress.org">Octopress</a> using the <a href="https://github.com/Z1MM32M4N/hpstr-theme/">HPSTR Theme for Octopress</a>.</span>

  </footer>
</div><!-- /.footer-wrapper -->



<script src="http://cdn.staticfile.org/jquery/1.9.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/javascripts/vendor/jquery-1.9.1.min.js"><\/script>')</script>
<!--
<script src="/javascripts/octopress.js" type="text/javascript"></script>
-->
<script src="/javascripts/scripts.min.js"></script>
<!-- 
 -->
<script type="text/javascript" src="http://tajs.qq.com/stats?sId=35560703" charset="UTF-8"></script>






</body>
</html>
